#include <iostream>
#include <gflags/gflags.h>
#include "child.h"

// 1.gflags基本使用
// 2.命令行传参
    // DEFINE_bool变量如果想要输出其取反的结果可以直接在变量名前加no
// 3.同一目录下的其他文件使用本文件定义的gflags参数
    // 按下面的参数表把DEFINE替换成DECLARE
// 4.配置文件解析参数
    // 注意配置文件中的一行参数末尾不要有多余的空格，否则这样也是不合法的
    // 配置文件叫啥后缀名是啥都无所谓，-flagsfile=relativepath/filename就行
/**
  flags提供的可定义参数
    DEFINE_bool
    DEFINE_int32
    DEFINE_int64
    DEFINE_uint64
    DEFINE_double
    DEFINE_string
 */

// 参数1参数名，参数2参数值，参数3参数描述
DEFINE_uint32(port, 8080, "监听端口");
DEFINE_string(ip, "127.0.0.1", "监听地址");
DEFINE_bool(reuse_addr, true, "是否开启地址重用");
DEFINE_double(pi, 3.14, "常数π");
DEFINE_int32(x, 89, "变量x");

void print(const int argc, char *argv[])
{
    for (int i = 0; i < argc; ++i)
    {
        char *temp = argv[i];
        while (*temp != '\0')
        {
            std::cout << *temp;
            ++temp;
        }
        std::cout << std::endl;
    }
}

int main(int argc, char *argv[])
{
    // std::cout << "ParseCommandLineFlags no start: call print" << std::endl;
    // print(argc, argv);
    // std::cout << "ParseCommandLineFlags no start: call print" << std::endl;
    // 如果第三个参数为false，两次打印的结果是一样的，如果是true的话最后一次打印只会输出./main
    // ./main --port=8080 --ip=0.0.0.0 --reuse_addr=false --pi=3.1415 --x=90
    google::ParseCommandLineFlags(&argc, &argv, true);
    std::cout << FLAGS_port << std::endl;
    std::cout << FLAGS_ip << std::endl;
    std::cout << FLAGS_reuse_addr << std::endl;
    std::cout << FLAGS_pi << std::endl;
    std::cout << FLAGS_x << std::endl;

    std::cout << "ParseCommandLineFlags start: call print" << std::endl;
    print(argc, argv);
    std::cout << "ParseCommandLineFlags start: call print" << std::endl;


    std::cout << "call print1()" << std::endl;
    print1();
    return 0;
}